'''
创建一个BankAccount类，要求：
有类属性bank_name（银行名称）
有实例属性account_name（账户名）和balance（余额）
有方法deposit(amount)（存款）和withdraw(amount)（取款）
有方法display()显示账户信息
修改上面的BankAccount类，将实例属性私有化，并提供相应的getter和setter方法，在setter方法中加入验证逻辑（余额不能为负数）。
为BankAccount类添加一个类方法change_bank_name(new_name)用于修改银行名称，和一个静态方法calculate_interest(principal, rate, time)用于计算利息(金额，利率，时间)。
'''
class BankAccount:
    bank_name = "西安银行"
    def __init__(self,account_name,balance):
        self.__account_name=account_name
        self.__balance=balance
    def set_account_name(self,account_name):
        self.__account_name = account_name
    def get_account_name(self):
        return self.__account_name

    def set_balance(self,balance):
        if balance<0:
            self.__balance =0
        else:
            self.__balance=balance

    def get_balance(self):
        return self.__balance

    @classmethod
    def change_bank_name(cls,new_name):
        BankAccount.bank_name=new_name

    # 存款
    def deposit(self,amount):
        # 获取余额 + amount
        s = self.get_balance()+amount
        self.set_balance(s)

    # 取款
    def withdraw(self,amount):
        if  self.get_balance()>amount:
            s = self.get_balance() - amount
            self.set_balance(s)
        else:
            print("余额不足")

    def display(self):
        print(f"-{BankAccount.bank_name}--余额-{self.__balance}-----")

xian = BankAccount("tom",3000)
xian.set_balance(4000)
xian.display()
xian.deposit(3)
xian.display()
xian.withdraw(4000)
xian.display()

xian.withdraw(3000)
xian.display()

xian.change_bank_name("北京银行")
BankAccount.change_bank_name("北京银行")
xian.display()


'''
创建一个Animal类，实现以下魔术方法：
__init__：初始化动物名称和年龄
__str__：返回动物的描述信息
__del__：在对象销毁时打印信息
'''
class Animal:
    def __init__(self,type):
        self.type=type

    def __str__(self):
        return f"这是个{self.type}动物"

    def __del__(self):
        print(f"{self.type}动物被销毁")

cat = Animal("猫")
dog = Animal("狗")
print(cat)
print(dog)